home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-11-08 | 6.5 KB | 229 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWBArray.cpp
- // Release Version: $ 1.0d11 $
- //
- // Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWOS.hpp"
-
- #ifndef FWBARRAY_H
- #include "FWBArray.h"
- #endif
-
- // ----- Foundation Includes -----
-
- #ifndef FWMEMMGR_H
- #include "FWMemMgr.h"
- #endif
-
- //========================================================================================
- // Runtime Informations
- //========================================================================================
-
- #if FW_LIB_EXPORT_PRAGMAS
- #pragma lib_export on
- #endif
-
- #ifdef FW_BUILD_MAC
- #pragma segment fwodutil
- #endif
-
- //========================================================================================
- // class FW_CByteArray
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::FW_CByteArray() :
- fOwnBuffer(TRUE),
- fOffset(0)
- {
- fODByteArray._buffer = (octet*)NULL;
- fODByteArray._length = 0;
- fODByteArray._maximum = 0;
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::FW_CByteArray(void* buffer, unsigned long byteCount) :
- fOwnBuffer(FALSE),
- fOffset(0)
- {
- fODByteArray._buffer = (octet*)buffer;
- fODByteArray._length = byteCount;
- fODByteArray._maximum = byteCount;
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::FW_CByteArray(const void* buffer, unsigned long byteCount) :
- fOwnBuffer(FALSE),
- fOffset(0)
- {
- fODByteArray._buffer = (octet*)buffer;
- fODByteArray._length = byteCount;
- fODByteArray._maximum = byteCount;
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::FW_CByteArray(unsigned long byteCount) :
- fOwnBuffer(TRUE),
- fOffset(0)
- {
- fODByteArray._buffer = NULL; // so if AllocateBlock fails it is clean
- if (byteCount != 0)
- fODByteArray._buffer = (octet*)FW_CMemoryManager::AllocateBlock(byteCount);
-
- fODByteArray._length = byteCount;
- fODByteArray._maximum = byteCount;
-
- FW_END_CONSTRUCTOR
- }
-
- /*
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::FW_CByteArray(const FW_CByteArray& byteArray)
- {
- fODByteArray._buffer = NULL; // so if AllocateBlock fails it is clean
-
- PrivCopyByteArray(byteArray);
-
- FW_END_CONSTRUCTOR
- }
- */
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::~FW_CByteArray
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray::~FW_CByteArray()
- {
- FW_START_DESTRUCTOR
-
- PrivDisposeByteArray();
- }
-
- /*
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::PrivCopyByteArray
- //----------------------------------------------------------------------------------------
-
- void FW_CByteArray::PrivCopyByteArray(const FW_CByteArray& byteArray)
- {
- fOwnBuffer = byteArray.fOwnBuffer;
- fOffset = byteArray.fOffset; // Not sure this is what we really want (MH)
- if (fOwnBuffer)
- {
- fODByteArray._buffer = (octet*)FW_CMemoryManager::AllocateBlock(byteArray.fODByteArray._maximum);
- FW_CMemoryManager::CopyMemory(byteArray.fODByteArray._buffer,
- fODByteArray._buffer,
- byteArray.fODByteArray._length);
- }
- else
- fODByteArray._buffer = byteArray.fODByteArray._buffer;
-
- fODByteArray._length = byteArray.fODByteArray._length;
- fODByteArray._maximum = byteArray.fODByteArray._maximum;
- }
- */
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::PrivDisposeByteArray
- //----------------------------------------------------------------------------------------
-
- void FW_CByteArray::PrivDisposeByteArray()
- {
- if (fOwnBuffer && fODByteArray._buffer != NULL)
- {
- FW_CMemoryManager::FreeBlock(fODByteArray._buffer);
- fODByteArray._buffer = NULL;
- }
- fOwnBuffer = TRUE;
- fODByteArray._length = 0;
- fODByteArray._maximum = 0;
- fOffset = 0;
- }
-
- /*
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::operator=
- //----------------------------------------------------------------------------------------
-
- FW_CByteArray& FW_CByteArray::operator=(const FW_CByteArray& byteArray)
- {
- PrivDisposeByteArray();
-
- PrivCopyByteArray(byteArray);
-
- return *this;
- }
- */
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::Set
- //----------------------------------------------------------------------------------------
-
- void FW_CByteArray::Set(void* buffer, unsigned long byteCount)
- {
- PrivDisposeByteArray();
-
- fOwnBuffer = FALSE;
- fODByteArray._buffer = (octet*)buffer;
- fODByteArray._length = byteCount;
- fODByteArray._maximum = byteCount;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::Clear
- //----------------------------------------------------------------------------------------
-
- void FW_CByteArray::Clear()
- {
- PrivDisposeByteArray();
- fOwnBuffer = TRUE;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CByteArray::Set
- //----------------------------------------------------------------------------------------
-
- unsigned long FW_CByteArray::CopyBuffer(void *buffer, unsigned long byteCount)
- {
- FW_ASSERT((fOffset < fODByteArray._length) || (fODByteArray._length == 0));
-
- unsigned long cnt = ((byteCount + fOffset) <= fODByteArray._length) ? byteCount : fODByteArray._length;
-
- FW_CMemoryManager::CopyMemory( fODByteArray._buffer + fOffset,
- buffer,
- cnt);
- fOffset += cnt;
-
- if (fOffset == fODByteArray._length)
- PrivDisposeByteArray();
-
- return cnt;
- }
-
-
-